package com.xypower;


//异或问题
public class printOneTimesTest {
    //int数组arr   一种数出现奇数次，其他数出现偶数次    求奇数个的数是？
    //0^n=n    n^n=0
   public static void printOddTimesNum1(int[] arr){
       int eor = 0;
       for (int cur : arr) {
           eor ^= cur;
       }
       System.out.println(eor);
   }

    //int数组arr   两种数出现奇数次，其他数出现偶数次    求奇数个的数是？
    //两种数--》 a!=b  eor!=0
    public static void printOddTimesNum2(int[] arr){
        int eor = 0;
        for (int cur : arr) {
            eor ^= cur;
        }
        //eor = a^b
        //eor必然有一个位置上是1
        //补码和原码
        int rightOne = eor & (~eor +1);//提取最右的1，最右位不一样

        int onlyOne = 0;
        for (int cur : arr) {
            if ((cur & rightOne) ==0){
                onlyOne ^= cur;
            }
        }
        System.out.println(onlyOne+" "+(eor ^ onlyOne));
    }
}
